home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
Apps
/
ScreenSavers
/
BackSpaceViews
/
LazyView.BackModule
/
LazyView.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
2KB
|
110 lines
#import "LazyView.h"
#import "LazyWraps.h"
#define SWAITTIME 1000 // wait 1 second
#define WAITMAX 60 // max. time until next move in seconds
#define R(max) (random()&1023)/1024.0*(max) // generate random number r, 0 <= r < max
#define FONT "Helvetica-BoldOblique"
@implementation LazyView
+ initialize
{
srandom(time(0));
return self;
}
- oneStep
{
time_t t = time(0);
if (![self timePassed: SWAITTIME])
return self;
timestr = ctime(&t);
PSWclearrect(x, y - 0.25 * size, size * 12.7, size * 1.05); // delete old text
if(--ticks <= 0) { // if we have to move...
float tsx; // text width
ticks = (int)R(WAITMAX)+10; // wait random time t until next move
size = floor(R(ms)) + 20; // new random size within bounds
tsx = 12.5 * size; // this is the approx. text width
x = R(mx-tsx); // calc. position for text in screen
y = R(my-size) + size * 0.3; // same for y and correct for chars like `g' (approx.)
r = R(0.8) + 0.2; // calc. random color which is not too dark
g = R(0.8) + 0.2;
b = R(0.8) + 0.2;
[actFont = [Font newFont:FONT size:size matrix:NX_IDENTITYMATRIX] set];
PSWshowtext(timestr, x, y, r, g, b);
} else {
PSWshowtext(timestr, x, y, r, g, b);
}
return self;
}
- initFrame:(NXRect *)frameRect
{
ticks = 0;
x = y = 0;
[super initFrame:frameRect];
[self setClipping:NO]; // not needed and faster...
actFont = [Font newFont:FONT size:30.0 matrix:NX_IDENTITYMATRIX];
[self newSize];
return self;
}
- sizeTo:(NXCoord)width :(NXCoord)height
{
[super sizeTo:width :height];
[self newSize];
return self;
}
- drawSelf:(const NXRect *)rects :(int)rectCount
{
if (!rects || !rectCount) return self;
PSsetgray(0);
NXRectFill(rects);
ticks = 0;
return self;
}
- didLockFocus // if we're lockFocused we have to reset the font
{
[actFont set];
return self;
}
- newSize // this keeps the size legal
{
mx = bounds.size.width;
my = bounds.size.height;
ms = mx/12.5 - 22;
ticks = 0;
return self;
}
- (const char *)windowTitle
{
return "Lazy";
}
- inspector:sender
{
char buf[MAXPATHLEN];
if (!infoView) {
[NXBundle getPath:buf forResource:"Info" ofType:"nib" inDirectory:[sender moduleDirectory:"Lazy"] withVersion:0];
[NXApp loadNibFile:buf owner:self withNames:NO];
}
return infoView;
}
@end